Response Model তৈরি এবং কাস্টমাইজ করা

Web Development - ফাস্টএপিআই (FastAPI) - FastAPI এর Response Management
183

FastAPI তে Response Model ব্যবহার করে আপনি API-এর আউটপুট (response) ডাটা কাস্টমাইজ করতে পারেন। Response Model সাধারণত Pydantic মডেল ব্যবহার করে তৈরি করা হয়, যা আউটপুট ডাটার টাইপ, ভ্যালিডেশন এবং কাস্টম ফিল্ড কনফিগার করার জন্য সহায়ক।

Response Model এর মাধ্যমে আপনি কেবল রেসপন্সের ডাটা গঠনই নির্ধারণ করেন না, বরং সেই ডাটা কীভাবে রিটার্ন হবে এবং কিভাবে ক্লায়েন্ট তা পাবেন, তা নিয়ন্ত্রণ করেন।


Step 1: Response Model তৈরি করা

FastAPI তে Response Model তৈরি করার জন্য আপনি Pydantic এর BaseModel ব্যবহার করবেন। এই মডেলটি ইনপুট ডাটা (Request Body) এবং আউটপুট ডাটা (Response Body) ভ্যালিডেট করার জন্য ব্যবহৃত হয়।

উদাহরণ: Response Model তৈরি

from pydantic import BaseModel

class ItemResponse(BaseModel):
    item_name: str
    item_price: float
    item_tax: float | None = None

এখানে:

  • item_name: একটি স্ট্রিং টাইপ ফিল্ড।
  • item_price: একটি ফ্লোট টাইপ ফিল্ড।
  • item_tax: একটি ঐচ্ছিক ফিল্ড, যা float টাইপের।

Step 2: Response Model ব্যবহার করা

Response Model ব্যবহার করতে, FastAPI এ response_model প্যারামিটারটি নির্দিষ্ট করে দিন। এটি FastAPI-কে বলে দেয় যে রেসপন্সে কী ধরনের ডাটা প্রত্যাশিত।

উদাহরণ: Response Model ব্যবহার

from fastapi import FastAPI

app = FastAPI()

class ItemResponse(BaseModel):
    item_name: str
    item_price: float
    item_tax: float | None = None

@app.get("/items/{item_id}", response_model=ItemResponse)
def get_item(item_id: int):
    return {"item_name": "Laptop", "item_price": 1500.00, "item_tax": 120.00}

এখানে:

  • /items/{item_id} এন্ডপয়েন্টের রেসপন্স হিসাবে ItemResponse মডেলটি ব্যবহার করা হয়েছে।

রিকোয়েস্ট উদাহরণ:

GET /items/1

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "item_tax": 120.00
}

Step 3: Response Model-এ কাস্টমাইজেশন

FastAPI-তে Response Model কাস্টমাইজ করতে পারেন। আপনি মডেলের মধ্যে default values, validation, এবং example values নির্ধারণ করতে পারেন। এছাড়া, response_model_exclude_unset এবং response_model_exclude_none এর মাধ্যমে নির্দিষ্ট ফিল্ডগুলো রেসপন্স থেকে বাদ দেওয়া যেতে পারে।

উদাহরণ: Default Values এবং Validation সহ Response Model

from pydantic import BaseModel, Field

class ItemResponse(BaseModel):
    item_name: str = Field(..., example="Laptop")
    item_price: float = Field(..., gt=0, example=1500.00)
    item_tax: float | None = Field(None, example=120.00)

    class Config:
        min_anystr_length = 3
        anystr_strip_whitespace = True

এখানে:

  • example: রেসপন্স ডেটার উদাহরণ হিসেবে প্রদান করা হয়েছে যা Swagger UI-তে প্রদর্শিত হবে।
  • gt=0: item_price ফিল্ডের জন্য একটি কাস্টম ভ্যালিডেশন নিশ্চিত করেছে, যাতে মূল্য শূন্যের বেশি হয়।
  • min_anystr_length: স্ট্রিং ফিল্ডগুলির জন্য মিনিমাম দৈর্ঘ্য নির্ধারণ করা হয়েছে।

Step 4: Response Model কাস্টমাইজেশন: Excluding Fields

আপনি চাইলে কিছু ফিল্ডকে রেসপন্স থেকে বাদ দিতে পারেন, যেমন: কোনো নির্দিষ্ট ফিল্ডের মান None বা unset থাকলে।

উদাহরণ: Exclude Unset বা None Fields

@app.get("/items/{item_id}", response_model=ItemResponse, response_model_exclude_unset=True)
def get_item(item_id: int):
    return {"item_name": "Laptop", "item_price": 1500.00}

এখানে, response_model_exclude_unset=True ব্যবহার করা হয়েছে, যার ফলে যেকোন unset ফিল্ড (যেগুলির ডিফল্ট মান দেওয়া হয়নি) রেসপন্সে অন্তর্ভুক্ত হবে না।

রেসপন্স (Unset item_tax বাদ দেওয়া):

{
  "item_name": "Laptop",
  "item_price": 1500.00
}

উদাহরণ: Exclude None Fields

@app.get("/items/{item_id}", response_model=ItemResponse, response_model_exclude_none=True)
def get_item(item_id: int):
    return {"item_name": "Laptop", "item_price": 1500.00, "item_tax": None}

এখানে, response_model_exclude_none=True ব্যবহার করা হয়েছে, যার ফলে item_tax (যার মান None) রেসপন্স থেকে বাদ দেওয়া হবে।

রেসপন্স (None item_tax বাদ দেওয়া):

{
  "item_name": "Laptop",
  "item_price": 1500.00
}

Step 5: Nested Models for Complex Responses

FastAPI-তে আপনি nested models ব্যবহার করে জটিল রেসপন্স কাঠামো তৈরি করতে পারেন, যেমন যেখানে একাধিক মডেল অন্তর্ভুক্ত থাকে।

উদাহরণ: Nested Response Model

from pydantic import BaseModel
from typing import List

class Manufacturer(BaseModel):
    name: str
    country: str

class ItemResponse(BaseModel):
    item_name: str
    item_price: float
    manufacturer: Manufacturer

@app.get("/items/{item_id}", response_model=ItemResponse)
def get_item(item_id: int):
    manufacturer = Manufacturer(name="TechCorp", country="USA")
    return {"item_name": "Laptop", "item_price": 1500.00, "manufacturer": manufacturer}

রিকোয়েস্ট উদাহরণ:

GET /items/1

রেসপন্স:

{
  "item_name": "Laptop",
  "item_price": 1500.00,
  "manufacturer": {
    "name": "TechCorp",
    "country": "USA"
  }
}

এখানে, Manufacturer মডেলটি ItemResponse মডেলের একটি অংশ হিসেবে nested করা হয়েছে।


Step 6: Customizing Response with Status Code

FastAPI তে আপনি status code কাস্টমাইজ করতে পারেন এবং তার সাথে Response Model ব্যবহার করতে পারেন।

উদাহরণ: Status Code সহ Response Model কাস্টমাইজ করা

from fastapi import FastAPI, HTTPException
from fastapi.responses import JSONResponse

app = FastAPI()

@app.get("/items/{item_id}", response_model=ItemResponse, status_code=200)
def get_item(item_id: int):
    return {"item_name": "Laptop", "item_price": 1500.00}

এখানে, status_code=200 দ্বারা রেসপন্সের HTTP স্ট্যাটাস কোড কাস্টমাইজ করা হয়েছে।


FastAPI তে Response Model তৈরি এবং কাস্টমাইজ করা খুবই সহজ এবং শক্তিশালী। আপনি Pydantic মডেল ব্যবহার করে ইনপুট এবং আউটপুট ডাটা ভ্যালিডেশন করতে পারেন, মডেল ফিল্ডে কাস্টম ভ্যালিডেশন যুক্ত করতে পারেন, এবং রেসপন্স থেকে ফিল্ড বাদ দেওয়ার জন্য বিভিন্ন কনফিগারেশন ব্যবহার করতে পারেন। এর মাধ্যমে আপনি আপনার API-এর আউটপুট ডাটা পরিষ্কারভাবে কাস্টমাইজ করতে পারবেন এবং ক্লায়েন্টের জন্য আরও ভালো ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে পারবেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...